GHDL不完全入門手冊
這學期的數電實驗與即將到來的數設均會大量使用VHDL。而Quatus作爲一款官方綁定的軟件並未提供有效的仿真手段。因此可能大家都是寫好後燒錄至CPLD上進行調試,調試週期長,而且很困難。
GHDL是一款開源自由的VHDL仿真軟件,通過編譯VHDL語言的源文件來生成一個文本文件,再對其進行解釋,達到仿真的目的。
使用Linux的同學可能會在軟件庫中找到ghdl,而Mac與Windows的同學可以點這裏來獲取。
仿真的準備活動
首先你需要一個vhdl的源代碼……其中包含着你想要實現的硬件。在這裏我們用一個4選1選擇器來作爲樣例。
[codebox 1]
我們需要對其進行測試與仿真。
硬件的一個entity就好像軟件中的一個函數/類,它還需要很多參數才能有確定的行爲。因此我們需要像給自己寫的函數庫寫測試一樣,給這個硬件寫一個用來測試它的構件(有沒有想到實驗室裏用來測試門芯片的那個箱子?)。
[codebox 2]
在寫測試的時候記得儘量將情況考慮周全,最好還能比較容易地判斷正確性。
開始仿真!
現在請確認
[codebox 3]
然後……ghdl要怎麼用呢?其實ghdl自帶生成一個簡單的Makefile的小工具。比如執行如下代碼:
[codebox 4]
就可以獲取一個簡單的Makefile了。Makefile也比較簡單,稍微看一下就能明白。緊接着,運行make以及make run就可以看到我們的仿真輸出了。
幾個Trick
首先,GHDLFLAGS必須要加上—ieee=synopsys選項才能使用library ieee裏面的內容。如果不想看到很多function “.*” is never referenced,可以加上—warn-no-unused。
其次,如果想限制仿真的運行時間,可以將Makefile中的GHDLRUNFLAGS變量加上—stop-time=time(如—stop-time=50ns)。
另外,如果你的系統有X server,你還可以輸出波形來進行檢查。查看波形需要使用gtkwave軟件,Linux與Mac的同學都可以在庫中方便地找到。想要生成波形,需要在GHDLRUNFLAGS中加上—vcd=filename。
吶吶,自從用上ghdl,從來沒燒過兩次CPLD。如果有問題請在下面提問。